<?php

include "application/classes/model/Candidato.php";
include "application/classes/model/Endereco.php";
include "application/classes/model/Deficiencia.php";
include "application/classes/model/DificuldadeDevidoDeficienciaIntelectual.php";
include "application/classes/model/Escolaridade.php";
include "application/classes/model/Idioma.php";
include "application/classes/model/Comunicacao.php";
include "application/classes/model/Informatica.php";
include "application/classes/model/ExperienciaProfissional.php";
include "application/classes/model/Empresa.php";
include "application/classes/model/Atividade.php";
include "application/classes/model/Palestra.php";
include "application/classes/model/Curso.php";
include "application/classes/model/Voluntariado.php";
include "application/classes/model/AtividadeComplementar.php";

include "application/classes/model/CandidatoDAO.php";
include "application/classes/model/EnderecoDAO.php";
include "application/classes/model/CurriculoDAO.php";
include "application/classes/model/AtividadeComplementarDAO.php";
include "application/classes/model/AtividadeDAO.php";
include "application/classes/model/ComunicacaoDAO.php";
include "application/classes/model/CursoDAO.php";
include "application/classes/model/DeficienciaDAO.php";
include "application/classes/model/DificuldadeDevidoDeficienciaIntelectualDAO.php";
include "application/classes/model/EmpresaDAO.php";
include "application/classes/model/EscolaridadeDAO.php";
include "application/classes/model/ExperienciaProfissionalDAO.php";
include "application/classes/model/IdiomaDAO.php";
include "application/classes/model/InformaticaDAO.php";
include "application/classes/model/PalestraDAO.php";
include "application/classes/model/VoluntariadoDAO.php";
defined('SYSPATH') OR die('No Direct Script Access');

class CandidatoLoginLoader{
	
	/****************
	 * ATRIBUTOS
	 ***************/
	
	private $candidatoCarregado;
	private $mensagemStatus;
	
	/****************
	 * CONSTRUTOR
	 ***************/
	public function CandidatoLoginLoader(){
		$this->candidatoCarregado = false;
		$this->mensagemStatus = "";
	}
	
	/****************
	 * METODOS
	 ***************/
	
	public function loginCandidato($email, $rg){
		$candidatoDAO = ORM::factory('candidatodao', $rg);
		if($candidatoDAO->loaded()){
			$this->setCandidatoCarregado(true);
			if($email == $candidatoDAO->email && $rg == $candidatoDAO->rg){
				$this->carregarDadosCandidatoNaSession($candidatoDAO);
				$this->carregarElementosDeVisualizacao();
			}
			else{
				$this->setCandidatoCarregado(false);
				$this->setMensagemStatus("E-mail não coincide com o cadastrado para este rg" );
			}
		}
		else{
			$this->setCandidatoCarregado(false);
			$this->setMensagemStatus("Candidato de rg " . $rg . "não existe" );
		}
	}
	
	public function carregarDadosCandidatoNaSession($candidatoDAO){
		$candidatoModel = new Candidato();
		$enderecoModel = new Endereco();
		
		
		//Carregando os dados pessoais
		$candidatoModel->setRg($candidatoDAO->rg);
		$candidatoModel->setCpf($candidatoDAO->cpf);
		$candidatoModel->setDataDeNascimento($candidatoDAO->dataDeNascimento);
		$candidatoModel->setEMail($candidatoDAO->email);
		$candidatoModel->setEstadoCivil($candidatoDAO->estadoCivil);
		$candidatoModel->setIdade($candidatoDAO->idade);
		$candidatoModel->setNome($candidatoDAO->nome);
		$candidatoModel->setSexo($candidatoDAO->sexo);
		$candidatoModel->setTelefoneResidencial($candidatoDAO->telefoneResidencial);
		$candidatoModel->setTelefoneCelular($candidatoDAO->telefoneCelular);
		$candidatoModel->setOutrosTelefones($candidatoDAO->telefoneAuxiliar);
		
		//Carregando o endereço
		$enderecoModel->setIdEndereco($candidatoDAO->endereco->idEndereco);
		$enderecoModel->setRua($candidatoDAO->endereco->rua);
		$enderecoModel->setNumero($candidatoDAO->endereco->numero);
		$enderecoModel->setBairro($candidatoDAO->endereco->bairro);
		$enderecoModel->setCep($candidatoDAO->endereco->cep);
		$enderecoModel->setComplemento($candidatoDAO->endereco->complemento);
		$enderecoModel->setCidade($candidatoDAO->endereco->cidade);
		$enderecoModel->setEstado($candidatoDAO->endereco->estado);
		$enderecoModel->setPais($candidatoDAO->endereco->pais);	
		
		
		//Carregando as deficiências
		
		//Inicializando o array do mesmo jeito tosko que na implementação porcausa do modelo
		$deficiencias = array();
		
		//Agora vamos varrer a lista de deficiencias obtidas do BD e colocando no array
		$deficienciasCarregadas = $candidatoDAO->curriculo->deficiencia->find_all();
		foreach($deficienciasCarregadas as $deficiencia){
			//Instancia uma nova deficiência a cada ciclo para não sobrar lixo do ciclo anterior
			$deficienciasModel = new Deficiencia();
			
			//Verifica se é intelectual pois se for ela "ativara" :-(  o array, lista de dificuldades em deficiência :-(
			if($deficiencia->tipoDeDeficiencia == "Intelectual"){
				$deficienciasModel->setIdDeficiencia($deficiencia->idDeficiencia);
				$deficienciasModel->setTipoDeficiencia($deficiencia->tipoDeDeficiencia);
				$deficienciasModel->setOutraModalidadeDeficiencia($deficiencia->outraModalidadeDeficiencia);
				$deficienciasModel->setObservacoes($deficiencia->observacoes);
				$dificuldades = $deficiencia->dificuldadedevidodeficienciaintelectual->find_all();
				foreach ($dificuldades as $dificuldade){
					
					$dificuldadeDevidoDeficienciaIntelectual = new DificuldadeDevidoDeficienciaIntelectual();
					$dificuldadeDevidoDeficienciaIntelectual->setIdDificuldade($dificuldade->idDificuldade);
					$dificuldadeDevidoDeficienciaIntelectual->setDificuldadeDevidoDevidoDeficiencia($dificuldade->dificuldadeDevidoDeficiencia);
					$deficienciasModel->adicionarDificuldadeDevidoDeficiencia($dificuldadeDevidoDeficienciaIntelectual);
				}
			}
			else{
				$deficienciasModel->setIdDeficiencia($deficiencia->idDeficiencia);
				$deficienciasModel->setTipoDeficiencia($deficiencia->tipoDeDeficiencia);
				$deficienciasModel->setOutraModalidadeDeficiencia($deficiencia->outraModalidadeDeficiencia);
				$deficienciasModel->setIntensidadeDaDeficiencia($deficiencia->intensidadeDaDeficiencia);
				$deficienciasModel->setModalidadeDaDeficiencia($deficiencia->modalidadeDaDeficiencia);
				$deficienciasModel->setObservacoes($deficiencia->observacoes);
				
			}
			
			$deficiencias[] = serialize($deficienciasModel);
		}
		
		//Carregando as escolaridades - mesmo problema de deficiências
		$escolaridadesCarregadas = $candidatoDAO->curriculo->escolaridade->find_all();
		
		$escolaridades = array();
		
		foreach ($escolaridadesCarregadas as $escolaridade){
			$escolaridadeModel = new Escolaridade();
			
			$escolaridadeModel->setIdEscolaridade($escolaridade->idEscolaridade);
			$escolaridadeModel->setEscolaridade($escolaridade->escolaridade);
			$escolaridadeModel->setGrauDaEscolaridade($escolaridade->grauDaEscolaridade);
			$escolaridadeModel->setTipoDeEnsinoMedio($escolaridade->tipoDeEnsinoMedio);
			$escolaridadeModel->setAnoDeConclusao($escolaridade->anoDeConclusao);
			$escolaridadeModel->setCurso($escolaridade->curso);
			$escolaridadeModel->setInstituicao($escolaridade->instituicao);
			$escolaridadeModel->setTipoDeEnsinoPosGraduacao($escolaridade->tipoDeEnsinoPosGraduacao);
			
			$escolaridades[] = serialize($escolaridadeModel);
		}
		
		//Carregando os idiomas
		$idiomasCarregados = $candidatoDAO->curriculo->idioma->find_all();
		$idiomas = array();
		
		foreach ($idiomasCarregados as $idioma){
			$idiomaModel = new Idioma();
			
			$idiomaModel->setIdIdioma($idioma->idIdioma);
			$idiomaModel->setNomeDoIdioma($idioma->nomeDoIdioma);
			$idiomaModel->setLe($idioma->le);
			$idiomaModel->setEscreve($idioma->escreve);
			$idiomaModel->setFala($idioma->fala);
			$idiomaModel->setEntende($idioma->entende);
			
			$idiomas[] = serialize($idiomaModel);
			
		}
		
		//Carregando comunicações
		
		$comunicacoesCarregadas = $candidatoDAO->curriculo->comunicacao->find_all();
		$comunicacoes = array();
		
		foreach ($comunicacoesCarregadas as $comunicacao){
			$comunicacaoModel = new Comunicacao();
			
			$comunicacaoModel->setIdComunicacao($comunicacao->idComunicacao);
			$comunicacaoModel->setMeioDeComunicacao($comunicacao->meioDeComunicacao);
			$comunicacaoModel->setOutros($comunicacao->outros);
			
			$comunicacoes[] = serialize($comunicacaoModel);
		}
		
		//Carregando as Informáticas
		$informaticasCarregadas = $candidatoDAO->curriculo->informatica->find_all();
		$informaticas = array();
		
		foreach ($informaticasCarregadas as $informatica){
			$informaticaModel = new Informatica();
			
			$informaticaModel->setIdInformatica($informatica->idInformatica);
			$informaticaModel->setConhecimentoEmInformatica($informatica->conhecimentoEmInformatica);
			$informaticaModel->setNivelDoConhecimento($informatica->nivelDoConhecimento);
			
			$informaticas[] = serialize($informaticaModel);
		}
		
		//Carregando a parte de experiência profissional do candidato
		
		$experienciaProfissionalModel = new ExperienciaProfissional();
		$experienciaProfissionalModel->setIdExperienciaProfissional($candidatoDAO->curriculo->experienciaprofissional->idExperienciaProfissional);
		$experienciaProfissionalModel->setPossuiExperiencia($candidatoDAO->curriculo->experienciaprofissional->possuiExperiencia);
		$empresasCarregadas = $candidatoDAO->curriculo->experienciaprofissional->empresa->find_all();
		
		foreach ($empresasCarregadas as $empresa){
			$empresaModel = new Empresa();
			
			$empresaModel->setIdEmpresa($empresa->idEmpresa);
			$empresaModel->setNomeEmpresa($empresa->nomeEmpresa);
			$empresaModel->setCargo($empresa->cargo);
			$empresaModel->setPeriodoInicio($empresa->periodoInicio);
			$empresaModel->setPeriodoFinal($empresa->periodoFinal);
			$empresaModel->setObservacao($empresa->observacao);
			
			$experienciaProfissionalModel->adicionarEmpresa($empresaModel);
		}
		
		//Carregando área de interesse
		
		$areaDeInteresse = $candidatoDAO->curriculo->areaDeInteresse;
		
		//Carregando Atividades Complementares
		
		$atividadeModel = new Atividade();
		//$atividade = $candidatoDAO->curriculo->atividade;
		//-Carregando os cursos de uma atividade
		$atividadeModel->setIdAtividade($candidatoDAO->curriculo->atividade->idAtividades);
		$cursos = $candidatoDAO->curriculo->atividade->curso->find_all();
		
		foreach ($cursos as $curso){
			$cursoModel = new Curso();

			$cursoModel->setIdCurso($curso->idCurso);
			$cursoModel->setNomeDoCurso($curso->nomeDaAtividade);
			$atividadeModel->adicionarCurso($cursoModel);
		}
		
		//-Carregando Palestras de uma atividade
		$palestras = $candidatoDAO->curriculo->atividade->palestra->find_all();
		
		foreach ($palestras as $palestra){
			$palestraModel = new Palestra();
			
			$palestraModel->setIdPalestra($palestra->idPalestra);
			$palestraModel->setTituloPalestra($palestra->tituloDaPalestra);
			$atividadeModel->adicionarPalestra($palestraModel);
		}
		
		//-Carregando os Voluntariados da atividade
		$voluntariados = $candidatoDAO->curriculo->atividade->voluntariado->find_all();
		
		foreach ($voluntariados as $voluntariado){
			$voluntariadoModel = new Voluntariado();
			
			$voluntariadoModel->setIdVoluntariado($voluntariado->idVoluntariado);
			$voluntariadoModel->setNomeDaFuncao($voluntariado->nomeDaFuncao);
			$atividadeModel->adicionarVoluntariado($voluntariadoModel);
		}
		
		//-Carregando as outras atividades
		$atividadesComplementares = $candidatoDAO->curriculo->atividade->atividadecomplementar->find_all();
		
		foreach ($atividadesComplementares as $atividadeComplementar){
			$atividadeComplementarModel = new AtividadeComplementar();			
			
			$atividadeComplementarModel->setIdAtividadeComplementar($atividadeComplementar->idAtividadeComplementar);
			$atividadeComplementarModel->setNomeDaAtividade($atividadeComplementar->nomeDaAtividade);
			$atividadeModel->adicionarAtividadeComplementar($atividadeComplementarModel);
		}
		
		//ERRO no modelo, informações complementares aqui está na atividade e deveria estar no Curriculo,
		//Fazer alteração
		$atividadeModel->setInformacoesComplementares($candidatoDAO->curriculo->informacoesComplementares);
		
		
		echo "<br>NOME = " . $candidatoModel->getNome();
		echo "<br>NOMEDAO = " . $candidatoDAO->nome;
		
		$_SESSION['candidato'] = serialize($candidatoModel);
		$_SESSION['endereco'] = serialize($enderecoModel);
		$_SESSION['deficiencia'] = serialize($deficiencias);
		$_SESSION['escolaridade'] = serialize($escolaridades);
		$_SESSION['idioma'] = serialize($idiomas);
		$_SESSION['comunicacao'] = serialize($comunicacoes);
		$_SESSION['informatica'] = serialize($informaticas);
		$_SESSION['experienciaProfissional'] = serialize($experienciaProfissionalModel);
		$_SESSION['areaDeInteresse'] = serialize($areaDeInteresse);
		$_SESSION['atividades'] = serialize($atividadeModel);
	}
	
	private function carregarElementosDeVisualizacao(){
		$_SESSION['pagina_corrente'] = "candidato";	
		$_SESSION['endereco_validado'] = true;
		$_SESSION['deficiencia_validado'] = true;
		$_SESSION['escolaridade_validado'] = true;
		$_SESSION['comunicacao_validado'] = true;
		$_SESSION['idioma_validado'] = true;
		$_SESSION['informatica_validado'] = true;
		$_SESSION['experienciaProfissional_validado'] = true;
		$_SESSION['areaDeInteresse_validado'] = true;
		$_SESSION['atividades_validado'] = true;
		//$_SESSION['pagina_corrente'] = "curriculo";
	}
	
	/******************
	 * GETTERS/SETTERS
	 *****************/
	
	public function setCandidatoCarregado($candidatoCarregado){
		$this->candidatoCarregado = $candidatoCarregado;
	}
	
	public function isCandidatoCarregado(){
		return $this->candidatoCarregado;
	}
	
	public function setMensagemStatus($mensagemStatus){
		$this->mensagemStatus = $mensagemStatus;
	}
	
	public function getMensagemStatus(){
		return $this->mensagemStatus;
	}
	
	
}
?>